package com.bbzn.device.client.vo.res;

import com.bbzn.device.client.dto.device.DeviceCountDTO;
import com.bbzn.user.comment.res.UserRes;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;

import java.io.Serializable;
import java.util.List;

/**
 * 设备统计DTO
 */
@Getter
@Setter
@ToString
@NoArgsConstructor
public class SupervisorsIndexVO implements Serializable {

    private static final long serialVersionUID = -3988326441659470730L;
    /**
     * 在线设备数
     */
    private Long onlineCount;
    /**
     * 离线设备数
     */
    private Long downLineCount;
    /**
     * 设备总数
     */
    private Integer totalDeviceCount;

    /**
     * 产品是否在线分类集合
     */
    private List<DeviceCountDTO> deviceCountDTOS;

    /**
     * 设备使用量集合
     */
    private List<DeviceUsedVO> deviceUsedVOS;

    /**
     * 年龄18-27岁的用户数目
     */
    private Long youngUserCount;

    /**
     * 年龄27-35岁的用户数目
     */
    private Long middleUserCount;

    /**
     * 年龄35-45岁的用户数目
     */
    private Long oldUserCount;

    /**
     * 年龄45-60岁的用户数目
     */
    private Long finalUserCount;

    /**
     * 总用户数
     */
    private Integer userCount;

    /**
     * 男用户数
     */
    private Long manCount;

    /**
     * 女用户数
     */
    private Long womanCount;

    public SupervisorsIndexVO(List<UserRes> userRes) {
        this.youngUserCount = userRes.stream().filter(r->null!=r.getAge() && r.getAge()>=18 && r.getAge()<=27).count();
        this.middleUserCount = userRes.stream().filter(r->null!=r.getAge() && r.getAge()>27 && r.getAge()<=30).count();
        this.oldUserCount = userRes.stream().filter(r->null!=r.getAge() && r.getAge()>30 && r.getAge()<=45).count();
        this.finalUserCount = userRes.stream().filter(r->null!=r.getAge() && r.getAge()>45 && r.getAge()<=60).count();
        this.userCount = userRes.size();
        this.manCount = userRes.stream().filter(r->null!=r.getGender() && r.getGender().equals(0)).count();
        this.womanCount = userRes.stream().filter(r->null!=r.getGender() && r.getGender().equals(1)).count();
    }
}